p = &desc->action;
for (;;) {
struct irqaction * action = *p;
-
if (action) {
struct irqaction **pp = p;
p = &action->next;
* something may have generated an irq long ago and we want to
* flush such a longstanding irq before considering it as spurious.
*/
- for (i = NR_PIRQS-1; i > 0; i--) {
+ for (i = NR_IRQS-1; i > 0; i--) {
desc = irq_desc + i;
spin_lock_irq(&desc->lock);
* (we must startup again here because if a longstanding irq
* happened in the previous stage, it may have masked itself)
*/
- for (i = NR_PIRQS-1; i > 0; i--) {
+ for (i = NR_IRQS-1; i > 0; i--) {
desc = irq_desc + i;
spin_lock_irq(&desc->lock);
* Now filter out any obviously spurious interrupts
*/
val = 0;
- for (i = 0; i < NR_PIRQS; i++) {
+ for (i = 0; i < NR_IRQS; i++) {
irq_desc_t *desc = irq_desc + i;
unsigned int status;
unsigned int mask;
mask = 0;
- for (i = 0; i < NR_PIRQS; i++) {
+ for (i = 0; i < NR_IRQS; i++) {
irq_desc_t *desc = irq_desc + i;
unsigned int status;
nr_irqs = 0;
irq_found = 0;
- for (i = 0; i < NR_PIRQS; i++) {
+ for (i = 0; i < NR_IRQS; i++) {
irq_desc_t *desc = irq_desc + i;
unsigned int status;
/* Upcall to generic IRQ layer. */
extern asmlinkage unsigned int do_IRQ(int irq, struct pt_regs *regs);
-#define VALID_EVTCHN(_chn) ((_chn) != -1)
+#define VALID_EVTCHN(_chn) ((_chn) >= 0)
/*
* Force a proper event-channel callback from Xen after clearing the
static unsigned int startup_dynirq(unsigned int irq)
{
- unmask_evtchn(irq_to_evtchn[irq]);
+ int evtchn = irq_to_evtchn[irq];
+
+ if ( !VALID_EVTCHN(evtchn) )
+ return 0;
+ unmask_evtchn(evtchn);
return 0;
}
static void shutdown_dynirq(unsigned int irq)
{
- mask_evtchn(irq_to_evtchn[irq]);
+ int evtchn = irq_to_evtchn[irq];
+
+ if ( !VALID_EVTCHN(evtchn) )
+ return;
+ mask_evtchn(evtchn);
}
static void enable_dynirq(unsigned int irq)
{
- unmask_evtchn(irq_to_evtchn[irq]);
+ int evtchn = irq_to_evtchn[irq];
+
+ unmask_evtchn(evtchn);
}
static void disable_dynirq(unsigned int irq)
{
- mask_evtchn(irq_to_evtchn[irq]);
+ int evtchn = irq_to_evtchn[irq];
+
+ mask_evtchn(evtchn);
}
static void ack_dynirq(unsigned int irq)
{
- mask_evtchn(irq_to_evtchn[irq]);
- clear_evtchn(irq_to_evtchn[irq]);
+ int evtchn = irq_to_evtchn[irq];
+
+ mask_evtchn(evtchn);
+ clear_evtchn(evtchn);
}
static void end_dynirq(unsigned int irq)
{
+ int evtchn = irq_to_evtchn[irq];
+
if ( !(irq_desc[irq].status & IRQ_DISABLED) )
- unmask_evtchn(irq_to_evtchn[irq]);
+ unmask_evtchn(evtchn);
}
static struct hw_interrupt_type dynirq_type = {